Now we test we can unselect nodes before selecting new ones.
authorJonathan Blandford <jrb@redhat.com>
Thu, 10 Jan 2002 00:11:32 +0000 (00:11 +0000)
committerJonathan Blandford <jrb@src.gnome.org>
Thu, 10 Jan 2002 00:11:32 +0000 (00:11 +0000)
Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>

* gtk/gtktreeselection.c
(_gtk_tree_selection_internal_select_node): Now we test we can
unselect nodes before selecting new ones.
(gtk_tree_selection_real_select_node): be careful comparing booleans.

ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/reference/gdk/tmpl/threads.sgml
gtk/gtktreeprivate.h
gtk/gtktreeselection.c

index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index c1e13fd827bcb7a102f07f49ddab97efe3ebed3d..323e8a91b8d487d08ecea78443e85616e9957d9e 100644 (file)
@@ -1,3 +1,10 @@
+Wed Jan  9 19:10:07 2002  Jonathan Blandford  <jrb@redhat.com>
+
+       * gtk/gtktreeselection.c
+       (_gtk_tree_selection_internal_select_node): Now we test we can
+       unselect nodes before selecting new ones.
+       (gtk_tree_selection_real_select_node): be careful comparing booleans.
+
 Wed Jan  9 21:31:44 2002  Kristian Rietveld  <kris@gtk.org>
 
        * gtk/gtkliststore.c (gtk_list_store_sort): pass NULL to
index 44aa66bee0b6f18416cd24db36441a0a23faa944..0297636f04952e6d62c5be7e8b1ae65f613aff3b 100644 (file)
@@ -265,11 +265,14 @@ section.
 </para>
 
 
+
 <!-- ##### FUNCTION gdk_threads_leave ##### -->
 <para>
 Leaves a critical region begun with gdk_threads_enter(). 
 </para>
 
+
+
 <!-- ##### VARIABLE gdk_threads_mutex ##### -->
 <para>
 The #GMutex used to implement the critical region for
index 2c4fc8dc81f7ddbcf4dc2ed49610df6747715bec..66b9085093613db606f2bd741f77b6c48c51b966 100644 (file)
@@ -102,6 +102,8 @@ struct _GtkTreeViewPrivate
   GtkTreeViewColumn *drag_column;
 
   /* bin_window offset */
+  GtkTreeRowReference *top_row;
+  gint top_row_dy;
   gint dy;
   gint drag_column_x;
 
index 3d21d3474c2393b518a4d48e0ebaf50da5140b12..54ef4c8d453bf0eb642138a69d5f362daa8bc793 100644 (file)
@@ -994,12 +994,30 @@ _gtk_tree_selection_internal_select_node (GtkTreeSelection *selection,
        }
       else
        {
-         /* FIXME: We only want to select the new node if we can unselect the
-          * old one, and we can select the new one.  We are currently
-          * unselecting the old one first, then trying the new one. */
          if (anchor_path)
            {
-             dirty = gtk_tree_selection_real_unselect_all (selection);
+             /* We only want to select the new node if we can unselect the old one,
+              * and we can select the new one. */
+             if (selection->user_func)
+               {
+                 if ((*selection->user_func) (selection, selection->tree_view->priv->model, path,
+                                              GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED),
+                                              selection->user_data))
+                   dirty = TRUE;
+               }
+             else
+               {
+                 dirty = TRUE;
+               }
+
+             /* if dirty is FALSE, we weren't able to select the new one, otherwise, we try to
+              * unselect the new one
+              */
+             if (dirty)
+               dirty = gtk_tree_selection_real_unselect_all (selection);
+
+             /* if dirty is TRUE at this point, we successfully unselected the
+              * old one, and can then select the new one */
              if (dirty)
                {
                  if (selection->tree_view->priv->anchor)
@@ -1093,6 +1111,8 @@ gtk_tree_selection_real_select_node (GtkTreeSelection *selection,
   gboolean selected = FALSE;
   GtkTreePath *path = NULL;
 
+  select = !! select;
+
   if (GTK_RBNODE_FLAG_SET (node, GTK_RBNODE_IS_SELECTED) != select)
     {
       path = _gtk_tree_view_find_path (selection->tree_view, tree, node);